package com.mylib.libcore.tools;

import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.alibaba.android.arouter.launcher.ARouter;
import com.mylib.libcore.config.RouterConfig;
import com.mylib.libcore.utils.JsonUtil;
import com.mylib.libcore.utils.UIUtils;
import com.qq.e.ads.nativ.express2.AdEventListener;
import com.qq.e.ads.nativ.express2.MediaEventListener;
import com.qq.e.ads.nativ.express2.NativeExpressAD2;
import com.qq.e.ads.nativ.express2.NativeExpressADData2;
import com.qq.e.ads.nativ.express2.VideoOption2;
import com.qq.e.ads.splash.SplashAD;
import com.qq.e.ads.splash.SplashADListener;
import com.qq.e.comm.util.AdError;

import java.util.List;

import static com.mylib.libcore.config.AppConfig.GDT_APP_MB_PIC_ONE;
import static com.mylib.libcore.config.AppConfig.GDT_APP_MB_ZX;
import static com.mylib.libcore.config.AppConfig.GDT_APP_OPEN_AD;

/**
 * @author Administrator
 * @date 2020/6/30-11:17
 * @description
 **/
public class GDTADTools {
    private static String TAG ="GDTADTools";
    private static SplashAD splashAD;//广点通
    private static NativeExpressADData2 mNativeExpressADData2;

    // 加载横幅广告
    public static  void loadHFAdByID(Context context,FrameLayout frameLayout,String adID,int width, int height) {
        if(!UIUtils.isOpenAD()){
            frameLayout.setVisibility(View.GONE);
            return;
        }
        NativeExpressAD2  mNativeExpressAD2 = new NativeExpressAD2(context, adID,  new NativeExpressAD2.AdLoadListener() {
            @Override
            public void onNoAD(AdError adError) {
                Log.d("loadGDTAdMiddle","adError====="+ JsonUtil.toJson(adError));
            }

            @Override
            public void onLoadSuccess(List<NativeExpressADData2> list) {
                if (list == null || list.isEmpty()) {
                    return;
                }
                mNativeExpressADData2 = list.get(0);
                if(!UIUtils.isEmpty(mNativeExpressADData2)) GDTADTools.renderGDTAd(mNativeExpressADData2,frameLayout);
            }
        });
        mNativeExpressAD2.setAdSize(width, height); // 单位dp

        // 如果您在平台上新建平台模板2.0广告位时，选择了支持视频，那么可以进行个性化设置（可选）
        VideoOption2.Builder builder = new VideoOption2.Builder();

        /**
         * 如果广告位支持视频广告，强烈建议在调用loadData请求广告前设置setAutoPlayPolicy，有助于提高视频广告的eCPM值 <br/>
         * 如果广告位仅支持图文广告，则无需调用
         */
        builder.setAutoPlayPolicy(VideoOption2.AutoPlayPolicy.WIFI) // WIFI 环境下可以自动播放视频
                .setAutoPlayMuted(true) // 自动播放时为静音
                .setDetailPageMuted(false)  // 视频详情页播放时不静音
                .setMaxVideoDuration(0) // 设置返回视频广告的最大视频时长（闭区间，可单独设置），单位:秒，默认为 0 代表无限制，合法输入为：5<=maxVideoDuration<=61. 此设置会影响广告填充，请谨慎设置
                .setMinVideoDuration(0); // 设置返回视频广告的最小视频时长（闭区间，可单独设置），单位:秒，默认为 0 代表无限制， 此设置会影响广告填充，请谨慎设置
        mNativeExpressAD2.setVideoOption2(builder.build());
        mNativeExpressAD2.loadAd(1);
        destroyAd();
    }

    // 加载横幅广告，设置条件
    public static  void loadHFAd(Context context,FrameLayout frameLayout,int width, int height) {
        if(!UIUtils.isOpenAD()){
            frameLayout.setVisibility(View.GONE);
            return;
        }
        NativeExpressAD2  mNativeExpressAD2 = new NativeExpressAD2(context, GDT_APP_MB_PIC_ONE+"",  new NativeExpressAD2.AdLoadListener() {
            @Override
            public void onNoAD(AdError adError) {
                Log.d("loadGDTAdMiddle","adError====="+ JsonUtil.toJson(adError));
            }

            @Override
            public void onLoadSuccess(List<NativeExpressADData2> list) {
                if (list == null || list.isEmpty()) {
                    return;
                }
                mNativeExpressADData2 = list.get(0);
                if(!UIUtils.isEmpty(mNativeExpressADData2)) GDTADTools.renderGDTAd(mNativeExpressADData2,frameLayout);
            }
        });
        mNativeExpressAD2.setAdSize(width, height); // 单位dp

        // 如果您在平台上新建平台模板2.0广告位时，选择了支持视频，那么可以进行个性化设置（可选）
        VideoOption2.Builder builder = new VideoOption2.Builder();

        /**
         * 如果广告位支持视频广告，强烈建议在调用loadData请求广告前设置setAutoPlayPolicy，有助于提高视频广告的eCPM值 <br/>
         * 如果广告位仅支持图文广告，则无需调用
         */
        builder.setAutoPlayPolicy(VideoOption2.AutoPlayPolicy.WIFI) // WIFI 环境下可以自动播放视频
                .setAutoPlayMuted(true) // 自动播放时为静音
                .setDetailPageMuted(false)  // 视频详情页播放时不静音
                .setMaxVideoDuration(0) // 设置返回视频广告的最大视频时长（闭区间，可单独设置），单位:秒，默认为 0 代表无限制，合法输入为：5<=maxVideoDuration<=61. 此设置会影响广告填充，请谨慎设置
                .setMinVideoDuration(0); // 设置返回视频广告的最小视频时长（闭区间，可单独设置），单位:秒，默认为 0 代表无限制， 此设置会影响广告填充，请谨慎设置
        mNativeExpressAD2.setVideoOption2(builder.build());
        mNativeExpressAD2.loadAd(1);
        destroyAd();
    }

    /**
     *  释放前一个 NativeExpressADData2 的资源
     */
    public static void destroyAd() {
        if (mNativeExpressADData2 != null) {
            Log.d(TAG, "destroyAD");
            mNativeExpressADData2.destroy();
        }
    }


    /**
     * 渲染广告
     * @param
     */
    public static void renderGDTAd(NativeExpressADData2 mNativeExpressADData2, FrameLayout mAdContainer) {
        if (mNativeExpressADData2 != null) {
            mNativeExpressADData2.setAdEventListener(new AdEventListener() {
                @Override
                public void onClick() {
                    Log.i(TAG, "onClick: " + mNativeExpressADData2);
                }

                @Override
                public void onExposed() {
                    Log.i(TAG, "onImpression: " + mNativeExpressADData2);
                }

                @Override
                public void onRenderSuccess() {
                    Log.i(TAG, "onRenderSuccess: " + mNativeExpressADData2);
                    View adView = mNativeExpressADData2.getAdView();
                    if (mAdContainer.getChildCount() > 0 && mAdContainer.getChildAt(0) == adView) {
                        return;
                    }
                    if (mAdContainer.getChildCount() > 0) {
                        mAdContainer.removeAllViews();
                    }
                    mAdContainer.removeAllViews();
                    if (adView != null && adView.getParent() != null) {
                        ((ViewGroup) adView.getParent()).removeView(adView);
                    }
                    mAdContainer.addView(adView);

                }

                @Override
                public void onRenderFail() {
                    Log.i(TAG, "onRenderFail: " + mNativeExpressADData2);
                }

                @Override
                public void onAdClosed() {
                    Log.i(TAG, "onAdClosed: " + mNativeExpressADData2);
                    mAdContainer.removeAllViews();
                    mNativeExpressADData2.destroy();
                }
            });

            mNativeExpressADData2.setMediaListener(new MediaEventListener() {
                @Override
                public void onVideoCache() {
                    Log.i(TAG, "onVideoCache: " + mNativeExpressADData2);
                }

                @Override
                public void onVideoStart() {
                    Log.i(TAG, "onVideoStart: " + mNativeExpressADData2);
                }

                @Override
                public void onVideoResume() {
                    Log.i(TAG, "onVideoResume: " + mNativeExpressADData2);
                }

                @Override
                public void onVideoPause() {
                    Log.i(TAG, "onVideoPause: " + mNativeExpressADData2);
                }

                @Override
                public void onVideoComplete() {
                    Log.i(TAG, "onVideoComplete: " + mNativeExpressADData2);
                }

                @Override
                public void onVideoError() {
                    Log.i(TAG, "onVideoError: " + mNativeExpressADData2);
                }
            });
            mNativeExpressADData2.render();
        }
    }


    //获取广点通广告
    public static void getGDTOpenAD(Activity activity,TextView tvTime,FrameLayout splashContainer){

        try {
            /**
             * 广点通-拉取开屏广告，开屏广告的构造方法有3种，详细说明请参考开发者文档。
             * @param activity        展示广告的activity
             * @param adContainer     展示广告的大容器
             * @param skipContainer   自定义的跳过按钮：传入该view给SDK后，SDK会自动给它绑定点击跳过事件。SkipView的样式可以由开发者自由定制，其尺寸限制请参考activity_splash.xml或者接入文档中的说明。
             * @param posId           广告位ID
             * @param adListener      广告状态监听器
             * @param fetchDelay      拉取广告的超时时长：取值范围[3000, 5000]，设为0表示使用广点通SDK默认的超时时长。
             */
            tvTime.setVisibility(View.VISIBLE);
            splashAD = new SplashAD(activity, tvTime, GDT_APP_OPEN_AD, new SplashADListener() {
                @Override
                public void onADDismissed() {
                    UIUtils.goToMainActivity();
                    Log.d("gdtOpen","广告关闭时调用，可能是用户关闭或者展示时间到。此时一般需要跳过开屏的 Activity，进入应用内容页面");
                }

                @Override
                public void onNoAD(AdError adError) {
                    UIUtils.goToMainActivity();
                    Log.d("gdtOpen","广告加载失败，error 对象包含了错误码和错误信息，错误码的详细内容"+adError.getErrorCode()+"==="+adError.getErrorCode());
                }

                @Override
                public void onADPresent() {
                    Log.d("gdtOpen","广告成功展示时调用，成功展示不等于有效展示（比如广告容器高度不够）");
                }

                @Override
                public void onADClicked() {
                    UIUtils.goToMainActivity();
                    Log.d("gdtOpen","广告被点击时调用，不代表满足计费条件（如点击时网络异常）");
                }

                @Override
                public void onADTick(long l) {
                    try {
                        tvTime.setText(l/1000+"s跳过");
                        if(l/1000<=0)  tvTime.setText("跳过");
                    }catch (Exception e){}
                    Log.d("gdtOpen","倒计时回调，返回广告还将被展示的剩余时间，单位是 ms");
                }

                @Override
                public void onADExposure() {
                    Log.d("gdtOpen","广告曝光时调用");
                }

                @Override
                public void onADLoaded(long l) {
                    Log.d("gdtOpen","广告加载成功的回调，在fetchAdOnly的情况下，表示广告拉取成功可以显示了。");
                }
            }, 4000);
            splashAD.fetchAndShowIn(splashContainer);
        }catch (Exception e){}
    }

}
